#include "Tool.h"

CTool::CTool()
{
}

CTool::~CTool()
{

}

//static member
CTool * CTool::Tool = 0;

//函数名称:
//函数功能：
//参数：
//返回值：
CTool * CTool::GetInstance()
{
    if(Tool == NULL)
    {
        Tool = new CTool();
    }
    return Tool;
}

/*------------------------------------------*/
//函数名称：GetRecentTime
//函数功能：用于获得当前时间
//参数：RetTime：用于获得返回的时间
//返回值：无
/*-------------------------------------------*/
void CTool::GetRecentTime(char * RetTime)
{
    time_t now;
    struct tm *time_now;
    time(&now);
    time_now = localtime(&now);
    strftime(RetTime, 32, "%T",time_now);
}

/*------------------------------------------*/
//函数名称：GetRecentDate
//函数功能：用于获得当前日期
//参数：RetDate：用于获得返回的日期
//返回值：无
/*-------------------------------------------*/
void CTool::GetRecentDate(char * RetDate)
{
    time_t now;
    struct tm *time_now;
    time(&now);
    time_now = localtime(&now);
    strftime(RetDate, 32, "%F",time_now);
}

/*------------------------------------------*/
//函数名称：GetDaysAgo
//函数功能：用于获得n天前的日期
//参数：RetDate：用于获得返回的日期
//返回值：无
/*-------------------------------------------*/
void CTool::GetDaysAgo(char *RetDate,const int n)
{
    time_t now, new_time;
    struct tm *time_now, *time_n_days_ago;

    time(&now);
    time_now = localtime(&now);
    time_n_days_ago = time_now;
    time_n_days_ago->tm_mday -= n;
    new_time = mktime(time_n_days_ago);
    time_n_days_ago = localtime(&new_time);
    strftime(RetDate, 32, "%F",time_n_days_ago);
}

/*------------------------------------------*/
//函数名称：ChartoInt
//函数功能：字符型转换为整型
//参数：(in)int ch：转换的字符
//返回值：返回转换后的整型
/*-------------------------------------------*/
int CTool::ChartoInt(char ch)
{
        if (ch <= '9')
                return ch - '0';
        return ch - 'A' + 10;
}

/*------------------------------------------*/
//函数名称：InttoChar
//函数功能：整型转换为字符
//参数：(in)int ch:转换的整型
//返回值：返回转换后的字符
/*-------------------------------------------*/
int CTool::InttoChar(int ch)
{
        if (ch <= 9)
                return ch + '0';
        return ch + 'A' - 10;
}

/*------------------------------------------*/
//函数名称：StrlenUnsigned
//函数功能：计算Unsigned char型的字符串长度
//参数：(in)unsigned char * ch：需要计算长度的字符串
//返回值：返回字符串的长度
/*-------------------------------------------*/
int CTool::StrlenUnsigned(unsigned char * ch)
{
        int cur_num = 0;
        while(1)
        {
                if(ch[cur_num] == '\0')
                        break;
                else
                        cur_num++;
        }
        return cur_num;
}

/*------------------------------------------*/
//函数名称：HexToChar
//函数功能：将十六进制数转换成char
//函数参数：(in)const int & value：十六进制对应的十进制
//返回值:char类型值
/*------------------------------------------*/
char CTool::HexToChar(const int & value)
{
    char ch;
    if(value >= 0 && value <= 9)
        return ch = '0' + value;
    else if(value >= 10 && value <= 15)
        return ch = 'A' + (value - 10);
}

/*------------------------------------------*/
//函数名：IntToString
//函数功能：将十进制数转换成对应的十六进制形式的string
//函数参数：(in)const int &value:十六进值对应的十进制数, （out）string & str：返回转换的string
//返回值:成功转换返回true，否则返回false
/*------------------------------------------*/
bool CTool::IntToString(const int &value, string & str)
{
    if( value >= 0 && value <= 255)
    {
        int temp;
        char ch;
        temp = value/16;
        ch = HexToChar(temp);
        str.push_back(ch);
        temp = value%16;
        ch = HexToChar(temp);
        str.push_back(ch);
        //cout << temps << endl;
    }
    else
        return false;
    return true;
}

//函数名称：
//函数功能：
//函数参数：
//返回值:
void CTool::Cleanup()
{
    if(Tool)
    {
        delete Tool;
        Tool = 0;
    }
}
